<!DOCTYPE html>
<!-- saved from url=(0016)http://localhost -->
<html>
  <head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <title>统一鉴权模块</title>
    <style>
        body{
            margin: 0;
        }
        #content-info{
            width: auto;
            margin: 0 auto;
            text-align: center;
        }
        #author-info{
            white-space: nowrap;
            text-overflow: ellipsis;
            overflow: hidden;
        }
        #title{
            text-overflow: ellipsis;
            white-space: nowrap;
            overflow: hidden;
            padding-top: 10px;
            margin-bottom: 2px;
            font-size: 34px;
            color: #505050;
        }
        .text{
            white-space:nowrap;
            text-overflow: ellipsis;
            display: inline-block;
            margin-right: 20px;
            margin-bottom: 2px;
            font-size: 20px;
            color: #8c8c8c;
        }
        #navBar{
            position: fixed;
            right:0;
            bottom: 0;
            background-color: #f0f3f4;
            overflow-y: auto;
            text-align: center;
        }
        #svg-container{
            width: 100%;
            min-width: 0;
            margin: 0 10px;
        }
        #nav-thumbs{
            padding: 0 5px;
        }
        .nav-thumb{
            position: relative;
            margin: 10px auto;
        }
        .nav-thumb >p{
            text-align: center;
            font-size: 12px;
            margin: 4px 0 0 0;
        }
        .nav-thumb >div{
            position: relative;
            display: inline-block;
            border: 1px solid #c6cfd5;
        }
        .nav-thumb img{
            display: block;
        }
        .nav-thumb span{
            pointer-events: none;
        }
        #main-content{
            bottom: 0;
            left: 0;
            right: 0;
            background-color: #d0cfd8;
            display: flex;
            height: auto;
            flex-flow: row wrap;
            text-align:center;
        }
        #svg-container >svg{
            display: block;
            margin:10px auto;
            margin-bottom: 0;
        }
        #copyright{
            bottom: 0;
            left: 50%;
            margin: 5px auto;
            font-size: 16px;
            color: #515151;
        }
        #copyright >a{
            text-decoration: none;
            color: #77C;
        }
        .number{
            position: absolute;
            top:0;
            left:0;
            border-top:22px solid #76838f;
            border-right: 22px solid transparent;
        }
        .pagenum{
            font-size: 12px;
            color: #fff;
            position: absolute;
            top: -23px;
            left: 2px;
        }
        #navBar::-webkit-scrollbar{
            width: 8px;
            background-color: #f5f5f5;
        }
        #navBar::-webkit-scrollbar-track{
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            border-radius: 8px;
            background-color: #fff;
        }
        #navBar::-webkit-scrollbar-thumb{
            border-radius: 8px;
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            background-color: #6b6b70;
        }
        #navBar::-webkit-scrollbar-thumb:hover{
            background-color: #4a4a4f;
        }
        .nav-thumb >div:hover{
            box-shadow:1px 1px 4px rgba(0,0,0,.4);
        }
        .selected .number{
            border-color: #08a1ef transparent;
        }
</style>
  </head>
  <body>
    <div id="main-area">
      <div id="content-info">
        <div id="title">统一鉴权模块</div>
        <div id="author-info">
        </div>
      </div>
      <div id="main-content">
        <div id="svg-container"><svg xmlns="http://www.w3.org/2000/svg" height="793" xmlns:ev="http://www.w3.org/2001/xml-events" id="page1" viewBox="0 0 1123 794" xmlns:xlink="http://www.w3.org/1999/xlink" width="1122" preserveAspectRadio="xMinYMin meet"><style type="text/css"><![CDATA[
.st2 {fill:#1f6391;font-family:宋体;font-size:10pt}
.st1 {fill:#ffffff;font-family:宋体;font-size:10pt}
]]></style><defs/><rect stroke="#808080" height="794" y="0" fill="#ffffff" x="0" width="1123"/><g transform="translate(385.26,241)" id="table1"><g><path stroke="#7e7e7e" fill="#3498db" d="M0,0L274,0L274,31.9L0,31.9L0,0z"/><text class="st1"><tspan y="20.4" x="53"> springboot-shiro-parent</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,31.9L274,31.9L274,66L0,66L0,31.9z"/><text class="st2"><tspan y="53.4" x="43">项目统一jar和plugIn的POM定义</tspan></text></g></g><g transform="translate(536,350)" id="table2"><g><path stroke="#7e7e7e" fill="#3498db" d="M0,0L208.5,0L208.5,31.9L0,31.9L0,0z"/><text class="st1"><tspan y="20.4" x="17"> springboot-shiro-gateway</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,31.9L208.5,31.9L208.5,66L0,66L0,31.9z"/><text class="st2"><tspan y="53.4" x="68">网关POM定义</tspan></text></g></g><g transform="translate(67,351.44)" id="table3"><g><path stroke="#7e7e7e" fill="#3498db" d="M0,0L215,0L215,29L0,29L0,0z"/><text class="st1"><tspan y="19" x="13"> springboot-shiro-framework</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,29L215,29L215,63.1L0,63.1L0,29z"/><text class="st2"><tspan y="50.6" x="58">基础框架POM定义</tspan></text></g></g><g transform="translate(306.5,348.56)" id="table4"><g><path stroke="#7e7e7e" fill="#3498db" d="M0,0L205,0L205,31.9L0,31.9L0,0z"/><text class="st1"><tspan y="20.4" x="15"> springboot-shiro-handler</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,31.9L205,31.9L205,66L0,66L0,31.9z"/><text class="st2"><tspan y="53.4" x="27">认证与鉴权服务化POM定义</tspan></text></g></g><g transform="translate(768.98,348.56)" id="table5"><g><path stroke="#7e7e7e" fill="#3498db" d="M0,0L208.5,0L208.5,31.9L0,31.9L0,0z"/><text class="st1"><tspan y="20.4" x="31"> springboot-shiro-mgt</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,31.9L208.5,31.9L208.5,66L0,66L0,31.9z"/><text class="st2"><tspan y="53.4" x="65">鉴权管理平台</tspan></text></g></g><g transform="translate(120.75,351.44)" id="shape6"><path stroke="#236ea1" fill="none" d="M0,0L0,-28.4L333,-28.4L333,-40"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M333,-44.4L330,-39.2C330.9,-39.8,331.9,-40,333,-40C334.1,-40,335.1,-39.8,336,-39.2L333,-44.4"/><rect height="15" y="-35.9" fill="#ffffff" x="147.4" width="26.6"/><text class="st2"><tspan y="-23.9" x="147.3">继承</tspan></text></g><g transform="translate(409,348.56)" id="shape7"><path stroke="#236ea1" fill="none" d="M0,0L0,-25.6L113.3,-25.6L113.3,-37.2"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M113.3,-41.6L110.3,-36.4C111.1,-36.9,112.2,-37.2,113.3,-37.2C114.4,-37.2,115.4,-36.9,116.3,-36.4L113.3,-41.6"/><rect height="15" y="-27.5" fill="#ffffff" x="-12.9" width="26.6"/><text class="st2"><tspan y="-15.5" x="-13">继承</tspan></text></g><g transform="translate(640.24,350)" id="shape8"><path stroke="#236ea1" fill="none" d="M0,0L0,-27L-118,-27L-118,-38.6"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-118,-43L-121,-37.8C-120.1,-38.3,-119.1,-38.6,-118,-38.6C-116.9,-38.6,-115.9,-38.3,-115,-37.8L-118,-43"/><rect height="15" y="-27.5" fill="#ffffff" x="-12.9" width="26.6"/><text class="st2"><tspan y="-15.5" x="-13">继承</tspan></text></g><g transform="translate(873.22,348.56)" id="shape9"><path stroke="#236ea1" fill="none" d="M0,0L0,-25.6L-282.5,-25.6L-282.5,-37.2"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-282.5,-41.6L-285.5,-36.4C-284.6,-36.9,-283.6,-37.2,-282.5,-37.2C-281.4,-37.2,-280.3,-36.9,-279.5,-36.4L-282.5,-41.6"/><rect height="15" y="-27.5" fill="#ffffff" x="-12.9" width="26.6"/><text class="st2"><tspan y="-15.5" x="-13">继承</tspan></text></g></svg><svg xmlns="http://www.w3.org/2000/svg" height="793" xmlns:ev="http://www.w3.org/2001/xml-events" id="page2" viewBox="0 0 1123 794" xmlns:xlink="http://www.w3.org/1999/xlink" width="1122" preserveAspectRadio="xMinYMin meet"><style type="text/css"><![CDATA[
.st4 {fill:#1f6391;font-family:宋体;font-size:10pt}
.st3 {fill:#ffffff;font-family:宋体;font-size:10pt}
]]></style><defs/><rect stroke="#808080" height="794" y="0" fill="#ffffff" x="0" width="1123"/><g transform="translate(365,80)" id="table10"><g><path stroke="#dd7195" fill="#dd7195" d="M0,0L311,0L311,30.3L0,30.3L0,0z"/><text class="st3"><tspan y="19.7" x="44">springboot-shiro-gateway-handler</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L311,30.3L311,64.5L0,64.5L0,30.3z"/><text class="st4"><tspan y="51.9" x="45">网关层响应、认证与鉴权服务化消费者</tspan></text></g></g><g transform="translate(321,273.07)" id="table11"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L256.5,0L256.5,30.3L0,30.3L0,0z"/><text class="st3"><tspan y="19.7" x="13">springboot-shiro-framework-client</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L256.5,30.3L256.5,64.5L0,64.5L0,30.3z"/><text class="st4"><tspan y="51.9" x="57">认证与鉴权服务化客户端</tspan></text></g></g><g transform="translate(552,176.53)" id="table12"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L273,0L273,30.3L0,30.3L0,0z"/><text class="st3"><tspan y="19.7" x="25">springboot-shiro-gateway-service</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L273,30.3L273,64.5L0,64.5L0,30.3z"/><text class="st4"><tspan y="51.9" x="98">网关核心实现</tspan></text></g></g><g transform="translate(67,379.6)" id="table13"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L245,0L245,30.3L0,30.3L0,0z"/><text class="st3"><tspan y="19.7" x="14">springboot-shiro-dubbo-app-face</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L245,30.3L245,64.5L0,64.5L0,30.3z"/><text class="st4"><tspan y="51.9" x="58">生产业务层服务化接口</tspan></text></g></g><g transform="translate(345,379.6)" id="table14"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L250,0L250,34.2L0,34.2L0,0z"/><text class="st3"><tspan y="21.6" x="17">springboot-shiro-framework-core</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,34.2L250,34.2L250,66L0,66L0,34.2z"/><text class="st4"><tspan y="54.6" x="82">shiro核心模块</tspan></text></g></g><g transform="translate(676,381.14)" id="table15"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L198,0L198,30.3L0,30.3L0,0z"/><text class="st3"><tspan y="19.7" x="26">springboot-shiro-face</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L198,30.3L198,64.5L0,64.5L0,30.3z"/><text class="st4"><tspan y="51.9" x="21">认证与鉴权服务化接口定义</tspan></text></g></g><g transform="translate(314.5,501)" id="table16"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L311,0L311,31.9L0,31.9L0,0z"/><text class="st3"><tspan y="20.4" x="37">springboot-shiro-framework-commons</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,31.9L311,31.9L311,66L0,66L0,31.9z"/><text class="st4"><tspan y="53.4" x="104">基础开发工具定义</tspan></text></g></g><g transform="translate(365,112.23)" id="shape17"><path stroke="#236ea1" fill="none" d="M0,0L-236.8,0L-236.8,263"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-236.8,267.4L-233.8,262.2C-234.6,262.7,-235.7,263,-236.8,263C-237.8,263,-238.9,262.7,-239.8,262.2L-236.8,267.4"/></g><g transform="translate(365,128.35)" id="shape18"><path stroke="#236ea1" fill="none" d="M0,0L-129,0L-129,235.3L42.5,235.3L42.5,246.9"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M42.5,251.3L45.5,246.1C44.6,246.6,43.6,246.9,42.5,246.9C41.4,246.9,40.4,246.6,39.5,246.1L42.5,251.3"/></g><g transform="translate(442.75,144.47)" id="shape19"><path stroke="#236ea1" fill="none" d="M0,0L0,96.6L-57.6,96.6L-57.6,124.2"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-57.6,128.6L-54.6,123.4C-55.5,123.9,-56.5,124.2,-57.6,124.2C-58.7,124.2,-59.7,123.9,-60.6,123.4L-57.6,128.6"/></g><g transform="translate(598.25,144.47)" id="shape20"><path stroke="#236ea1" fill="none" d="M0,0L0,16.1L22,16.1L22,27.7"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M22,32.1L25,26.9C24.1,27.4,23.1,27.7,22,27.7C20.9,27.7,19.9,27.4,19,26.9L22,32.1"/></g><g transform="translate(676,128.35)" id="shape21"><path stroke="#236ea1" fill="none" d="M0,0L181,0L181,220.8L148.5,220.8L148.5,248.4"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M148.5,252.8L151.5,247.6C150.6,248.1,149.6,248.4,148.5,248.4C147.4,248.4,146.4,248.1,145.5,247.6L148.5,252.8"/></g><g transform="translate(676,96.12)" id="shape22"><path stroke="#236ea1" fill="none" d="M0,0L230,0L230,421.4L-46.1,421.4"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-50.5,421.4L-45.3,424.4C-45.8,423.5,-46.1,422.5,-46.1,421.4C-46.1,420.3,-45.8,419.3,-45.3,418.4L-50.5,421.4"/></g><g transform="translate(620.25,241)" id="shape23"><path stroke="#236ea1" fill="none" d="M0,0L0,16.1L-171,16.1L-171,27.7"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-171,32.1L-168,26.9C-168.9,27.4,-169.9,27.7,-171,27.7C-172.1,27.7,-173.1,27.4,-174,26.9L-171,32.1"/></g><g transform="translate(688.5,241)" id="shape24"><path stroke="#236ea1" fill="none" d="M0,0L0,122.6L-218.5,122.6L-218.5,134.2"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-218.5,138.6L-215.5,133.4C-216.4,133.9,-217.4,134.2,-218.5,134.2C-219.6,134.2,-220.6,133.9,-221.5,133.4L-218.5,138.6"/></g><g transform="translate(756.75,241)" id="shape25"><path stroke="#236ea1" fill="none" d="M0,0L0,108.1L-31.3,108.1L-31.3,135.7"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-31.3,140.1L-28.3,134.9C-29.1,135.5,-30.2,135.7,-31.3,135.7C-32.3,135.7,-33.4,135.5,-34.3,134.9L-31.3,140.1"/></g><g transform="translate(825,224.88)" id="shape26"><path stroke="#236ea1" fill="none" d="M0,0L134,0L134,325.6L-195.1,325.6"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-199.5,325.6L-194.3,328.6C-194.8,327.7,-195.1,326.7,-195.1,325.6C-195.1,324.5,-194.8,323.5,-194.3,322.6L-199.5,325.6"/></g><g transform="translate(577.5,321.42)" id="shape27"><path stroke="#236ea1" fill="none" d="M0,0L49.5,0L49.5,74.7L21.9,74.7"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M17.5,74.7L22.7,77.7C22.2,76.8,21.9,75.8,21.9,74.7C21.9,73.6,22.2,72.6,22.7,71.7L17.5,74.7"/></g><g transform="translate(577.5,305.3)" id="shape28"><path stroke="#236ea1" fill="none" d="M0,0L66.5,0L66.5,92L94.1,92"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M98.5,92L93.3,89C93.8,89.8,94.1,90.9,94.1,92C94.1,93,93.8,94.1,93.3,95L98.5,92"/></g><g transform="translate(128.25,444.07)" id="shape29"><path stroke="#236ea1" fill="none" d="M0,0L0,89.9L181.9,89.9"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M186.3,89.9L181.1,86.9C181.6,87.8,181.9,88.8,181.9,89.9C181.9,91,181.6,92,181.1,92.9L186.3,89.9"/></g><g transform="translate(407.5,445.6)" id="shape30"><path stroke="#236ea1" fill="none" d="M0,0L0,23.4L-15.3,23.4L-15.3,51"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-15.3,55.4L-12.3,50.2C-13.1,50.7,-14.2,51,-15.3,51C-16.3,51,-17.4,50.7,-18.3,50.2L-15.3,55.4"/></g><g transform="translate(725.5,445.6)" id="shape31"><path stroke="#236ea1" fill="none" d="M0,0L0,23.4L-255.5,23.4L-255.5,51"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-255.5,55.4L-252.5,50.2C-253.4,50.7,-254.4,51,-255.5,51C-256.6,51,-257.6,50.7,-258.5,50.2L-255.5,55.4"/></g></svg><svg xmlns="http://www.w3.org/2000/svg" height="793" xmlns:ev="http://www.w3.org/2001/xml-events" id="page3" viewBox="0 0 1123 794" xmlns:xlink="http://www.w3.org/1999/xlink" width="1122" preserveAspectRadio="xMinYMin meet"><style type="text/css"><![CDATA[
.st6 {fill:#1f6391;font-family:宋体;font-size:10pt}
.st5 {fill:#ffffff;font-family:宋体;font-size:10pt}
]]></style><defs/><rect stroke="#808080" height="794" y="0" fill="#ffffff" x="0" width="1123"/><g transform="translate(378,260)" id="table32"><g><path stroke="#dd7195" fill="#dd7195" d="M0,0L311,0L311,30.3L0,30.3L0,0z"/><text class="st5"><tspan y="19.7" x="68">springboot-shiro-producer</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L311,30.3L311,64.5L0,64.5L0,30.3z"/><text class="st6"><tspan y="51.9" x="84">认证与鉴权服务化生产者</tspan></text></g></g><g transform="translate(124,364.62)" id="table33"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L278,0L278,30.3L0,30.3L0,0z"/><text class="st5"><tspan y="19.7" x="20">springboot-shiro-framework-service</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L278,30.3L278,64.5L0,64.5L0,30.3z"/><text class="st6"><tspan y="51.9" x="76">shiro业务层持久化层</tspan></text></g></g><g transform="translate(364,586)" id="table34"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L279,0L279,31.9L0,31.9L0,0z"/><text class="st5"><tspan y="20.4" x="21">springboot-shiro-framework-commons</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,31.9L279,31.9L279,66L0,66L0,31.9z"/><text class="st6"><tspan y="53.4" x="88">基础开发工具定义</tspan></text></g></g><g transform="translate(630.5,470.77)" id="table35"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L251,0L251,30.3L0,30.3L0,0z"/><text class="st5"><tspan y="19.7" x="52">springboot-shiro-face</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L251,30.3L251,64.5L0,64.5L0,30.3z"/><text class="st6"><tspan y="51.9" x="48">认证与鉴权服务化接口定义</tspan></text></g></g><g transform="translate(246.5,469.24)" id="table36"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L311,0L311,31.9L0,31.9L0,0z"/><text class="st5"><tspan y="20.4" x="51">springboot-shiro-framework-dao</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,31.9L311,31.9L311,66L0,66L0,31.9z"/><text class="st6"><tspan y="53.4" x="112">shiro持久化层</tspan></text></g></g><g transform="translate(193.5,429.08)" id="shape37"><path stroke="#236ea1" fill="none" d="M0,0L0,189.9L166.1,189.9"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M170.5,189.9L165.3,186.9C165.8,187.8,166.1,188.8,166.1,189.9C166.1,191,165.8,192,165.3,192.9L170.5,189.9"/></g><g transform="translate(402,535.24)" id="shape38"><path stroke="#236ea1" fill="none" d="M0,0L0,18.8L31.8,18.8L31.8,46.4"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M31.8,50.8L34.8,45.6C33.9,46.1,32.8,46.4,31.8,46.4C30.7,46.4,29.6,46.1,28.8,45.6L31.8,50.8"/></g><g transform="translate(693.25,535.24)" id="shape39"><path stroke="#236ea1" fill="none" d="M0,0L0,67.3L-45.9,67.3"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-50.3,67.3L-45.1,70.3C-45.6,69.4,-45.9,68.4,-45.9,67.3C-45.9,66.2,-45.6,65.1,-45.1,64.3L-50.3,67.3"/></g><g transform="translate(611.25,324.46)" id="shape40"><path stroke="#236ea1" fill="none" d="M0,0L0,229.5L-107.8,229.5L-107.8,257.1"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-107.8,261.5L-104.8,256.3C-105.6,256.9,-106.7,257.1,-107.8,257.1C-108.8,257.1,-109.9,256.9,-110.8,256.3L-107.8,261.5"/></g><g transform="translate(332.5,429.08)" id="shape41"><path stroke="#236ea1" fill="none" d="M0,0L0,24.2L69.5,24.2L69.5,35.8"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M69.5,40.2L72.5,35C71.6,35.5,70.6,35.8,69.5,35.8C68.4,35.8,67.4,35.5,66.5,35L69.5,40.2"/></g><g transform="translate(378,292.23)" id="shape42"><path stroke="#236ea1" fill="none" d="M0,0L-115,0L-115,68"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-115,72.4L-112,67.2C-112.9,67.7,-113.9,68,-115,68C-116.1,68,-117.1,67.7,-118,67.2L-115,72.4"/></g><g transform="translate(689,292.23)" id="shape43"><path stroke="#236ea1" fill="none" d="M0,0L129.8,0L129.8,174.1"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M129.8,178.5L132.8,173.3C131.9,173.9,130.8,174.1,129.8,174.1C128.7,174.1,127.6,173.9,126.8,173.3L129.8,178.5"/></g><g transform="translate(455.75,324.46)" id="shape44"><path stroke="#236ea1" fill="none" d="M0,0L0,112.8L24,112.8L24,140.4"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M24,144.8L27,139.6C26.1,140.1,25.1,140.4,24,140.4C22.9,140.4,21.9,140.1,21,139.6L24,144.8"/></g></svg><svg xmlns="http://www.w3.org/2000/svg" height="793" xmlns:ev="http://www.w3.org/2001/xml-events" id="page4" viewBox="0 0 1123 794" xmlns:xlink="http://www.w3.org/1999/xlink" width="1122" preserveAspectRadio="xMinYMin meet"><style type="text/css"><![CDATA[
.st8 {fill:#1f6391;font-family:宋体;font-size:10pt}
.st7 {fill:#ffffff;font-family:宋体;font-size:10pt}
]]></style><defs/><rect stroke="#808080" height="794" y="0" fill="#ffffff" x="0" width="1123"/><g transform="translate(392.5,72)" id="table45"><g><path stroke="#dd7195" fill="#dd7195" d="M0,0L227,0L227,31.9L0,31.9L0,0z"/><text class="st7"><tspan y="20.4" x="44">springboot-shiro-mgt</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,31.9L227,31.9L227,66L0,66L0,31.9z"/><text class="st8"><tspan y="53.4" x="62">统一鉴权管控后台</tspan></text></g></g><g transform="translate(336,400)" id="table46"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L292,0L292,31.9L0,31.9L0,0z"/><text class="st7"><tspan y="20.4" x="27">springboot-shiro-framework-commons</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,31.9L292,31.9L292,66L0,66L0,31.9z"/><text class="st8"><tspan y="53.4" x="94">基础开发工具定义</tspan></text></g></g><g transform="translate(420.26,286.35)" id="table47"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L274,0L274,36.7L0,36.7L0,0z"/><text class="st7"><tspan y="22.9" x="29">springboot-shiro-framework-core</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,36.7L274,36.7L274,70.8L0,70.8L0,36.7z"/><text class="st8"><tspan y="58.3" x="94">shiro核心模块</tspan></text></g></g><g transform="translate(771.02,291.17)" id="table48"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L265,0L265,31.9L0,31.9L0,0z"/><text class="st7"><tspan y="20.4" x="28">springboot-shiro-framework-dao</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,31.9L265,31.9L265,66L0,66L0,31.9z"/><text class="st8"><tspan y="53.4" x="89">shiro持久化层</tspan></text></g></g><g transform="translate(599,177.27)" id="table49"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L278,0L278,30.3L0,30.3L0,0z"/><text class="st7"><tspan y="19.7" x="20">springboot-shiro-framework-service</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L278,30.3L278,64.5L0,64.5L0,30.3z"/><text class="st8"><tspan y="51.9" x="76">shiro业务层持久化层</tspan></text></g></g><g transform="translate(102.5,286.35)" id="table50"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L241,0L241,30.3L0,30.3L0,0z"/><text class="st7"><tspan y="19.7" x="47">springboot-shiro-face</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L241,30.3L241,64.5L0,64.5L0,30.3z"/><text class="st8"><tspan y="51.9" x="43">认证与鉴权服务化接口定义</tspan></text></g></g><g transform="translate(175,177.27)" id="table51"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L256.5,0L256.5,30.3L0,30.3L0,0z"/><text class="st7"><tspan y="19.7" x="13">springboot-shiro-framework-client</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L256.5,30.3L256.5,64.5L0,64.5L0,30.3z"/><text class="st8"><tspan y="51.9" x="57">认证与鉴权服务化客户端</tspan></text></g></g><g transform="translate(392.5,121.5)" id="shape52"><path stroke="#236ea1" fill="none" d="M0,0L-229.8,0L-229.8,160.5"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-229.8,164.9L-226.8,159.7C-227.6,160.2,-228.7,160.5,-229.8,160.5C-230.8,160.5,-231.9,160.2,-232.8,159.7L-229.8,164.9"/></g><g transform="translate(449.25,138)" id="shape53"><path stroke="#236ea1" fill="none" d="M0,0L0,23.3L-146,23.3L-146,34.9"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-146,39.3L-143,34.1C-143.9,34.6,-144.9,34.9,-146,34.9C-147.1,34.9,-148.1,34.6,-149,34.1L-146,39.3"/></g><g transform="translate(562.75,138)" id="shape54"><path stroke="#236ea1" fill="none" d="M0,0L0,23.3L105.8,23.3L105.8,34.9"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M105.8,39.3L108.8,34.1C107.9,34.6,106.8,34.9,105.8,34.9C104.7,34.9,103.6,34.6,102.8,34.1L105.8,39.3"/></g><g transform="translate(619.5,105)" id="shape55"><path stroke="#236ea1" fill="none" d="M0,0L350.3,0L350.3,181.8"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M350.3,186.2L353.3,181C352.4,181.5,351.4,181.8,350.3,181.8C349.2,181.8,348.2,181.5,347.3,181L350.3,186.2"/></g><g transform="translate(506,138)" id="shape56"><path stroke="#236ea1" fill="none" d="M0,0L0,116.4L51.3,116.4L51.3,144"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M51.3,148.4L54.3,143.2C53.4,143.7,52.4,144,51.3,144C50.2,144,49.1,143.7,48.3,143.2L51.3,148.4"/></g><g transform="translate(392.5,105)" id="shape57"><path stroke="#236ea1" fill="none" d="M0,0L-322,0L-322,328L-60.9,328"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-56.5,328L-61.7,325C-61.2,325.9,-60.9,326.9,-60.9,328C-60.9,329.1,-61.2,330.1,-61.7,331L-56.5,328"/></g><g transform="translate(239.13,241.73)" id="shape58"><path stroke="#236ea1" fill="none" d="M0,0L0,28.6L-16.1,28.6L-16.1,40.2"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-16.1,44.6L-13.1,39.4C-14,39.9,-15,40.2,-16.1,40.2C-17.2,40.2,-18.2,39.9,-19.1,39.4L-16.1,44.6"/></g><g transform="translate(303.25,241.73)" id="shape59"><path stroke="#236ea1" fill="none" d="M0,0L0,28.6L105.8,28.6L105.8,153.9"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M105.8,158.3L108.8,153.1C107.9,153.6,106.8,153.9,105.8,153.9C104.7,153.9,103.6,153.6,102.8,153.1L105.8,158.3"/></g><g transform="translate(431.5,225.62)" id="shape60"><path stroke="#236ea1" fill="none" d="M0,0L57.3,0L57.3,56.3"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M57.3,60.7L60.3,55.5C59.4,56.1,58.4,56.3,57.3,56.3C56.2,56.3,55.1,56.1,54.3,55.5L57.3,60.7"/></g><g transform="translate(668.5,241.73)" id="shape61"><path stroke="#236ea1" fill="none" d="M0,0L0,28.6L-42.7,28.6L-42.7,40.2"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-42.7,44.6L-39.7,39.4C-40.6,39.9,-41.6,40.2,-42.7,40.2C-43.8,40.2,-44.9,39.9,-45.7,39.4L-42.7,44.6"/></g><g transform="translate(738,241.73)" id="shape62"><path stroke="#236ea1" fill="none" d="M0,0L0,174.8L-105.6,174.8"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-110,174.8L-104.8,177.8C-105.3,176.9,-105.6,175.9,-105.6,174.8C-105.6,173.7,-105.3,172.6,-104.8,171.8L-110,174.8"/></g><g transform="translate(903.52,357.17)" id="shape63"><path stroke="#236ea1" fill="none" d="M0,0L0,75.8L-271.1,75.8"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-275.5,75.8L-270.3,78.8C-270.8,77.9,-271.1,76.9,-271.1,75.8C-271.1,74.7,-270.8,73.7,-270.3,72.8L-275.5,75.8"/></g><g transform="translate(162.75,350.82)" id="shape64"><path stroke="#236ea1" fill="none" d="M0,0L0,65.7L168.9,65.7"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M173.3,65.7L168.1,62.7C168.6,63.6,168.9,64.6,168.9,65.7C168.9,66.8,168.6,67.8,168.1,68.7L173.3,65.7"/></g><g transform="translate(557.26,357.17)" id="shape65"><path stroke="#236ea1" fill="none" d="M0,0L0,26.8L-75.3,26.8L-75.3,38.4"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-75.3,42.8L-72.3,37.6C-73.1,38.1,-74.2,38.4,-75.3,38.4C-76.4,38.4,-77.4,38.1,-78.3,37.6L-75.3,42.8"/></g></svg><svg xmlns="http://www.w3.org/2000/svg" height="793" xmlns:ev="http://www.w3.org/2001/xml-events" id="page5" viewBox="0 0 1123 794" xmlns:xlink="http://www.w3.org/1999/xlink" width="1122" preserveAspectRadio="xMinYMin meet"><style type="text/css"><![CDATA[
.st10 {fill:#1f6391;font-family:宋体;font-size:10pt}
.st9 {fill:#ffffff;font-family:宋体;font-size:10pt}
]]></style><defs/><rect stroke="#808080" height="794" y="0" fill="#ffffff" x="0" width="1123"/><g transform="translate(709,417.53)" id="table66"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L256,0L256,30.3L0,30.3L0,0z"/><text class="st9"><tspan y="19.7" x="20">springboot-shiro-dubbo-app-face</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L256,30.3L256,64.5L0,64.5L0,30.3z"/><text class="st10"><tspan y="51.9" x="63">生产业务层服务化接口</tspan></text></g></g><g transform="translate(298,417.53)" id="table67"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L278,0L278,30.3L0,30.3L0,0z"/><text class="st9"><tspan y="19.7" x="31">springboot-shiro-dubbo-app-core</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L278,30.3L278,64.5L0,64.5L0,30.3z"/><text class="st10"><tspan y="51.9" x="81">生产业务层持久化层</tspan></text></g></g><g transform="translate(222,308.53)" id="table68"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L288,0L288,30.3L0,30.3L0,0z"/><text class="st9"><tspan y="19.7" x="25">springboot-shiro-dubbo-app-service</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L288,30.3L288,64.5L0,64.5L0,30.3z"/><text class="st10"><tspan y="51.9" x="112">生产业务层</tspan></text></g></g><g transform="translate(444,203.77)" id="table69"><g><path stroke="#dd7195" fill="#dd7195" d="M0,0L311,0L311,30.3L0,30.3L0,0z"/><text class="st9"><tspan y="19.7" x="37">springboot-shiro-dubbo-app-handler</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,30.3L311,30.3L311,64.5L0,64.5L0,30.3z"/><text class="st10"><tspan y="51.9" x="104">生产业务层生产者</tspan></text></g></g><g transform="translate(421.76,526.53)" id="table70"><g><path stroke="#f2a282" fill="#f2a282" d="M0,0L279,0L279,31.9L0,31.9L0,0z"/><text class="st9"><tspan y="20.4" x="21">springboot-shiro-framework-commons</tspan></text></g><g><path stroke="#7e7e7e" fill="#e8eff8" d="M0,31.9L279,31.9L279,66L0,66L0,31.9z"/><text class="st10"><tspan y="53.4" x="88">基础开发工具定义</tspan></text></g></g><g transform="translate(521.75,268.23)" id="shape71"><path stroke="#236ea1" fill="none" d="M0,0L0,24.3L-155.8,24.3L-155.8,35.9"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-155.8,40.3L-152.8,35.1C-153.6,35.6,-154.7,35.9,-155.8,35.9C-156.8,35.9,-157.9,35.6,-158.8,35.1L-155.8,40.3"/></g><g transform="translate(366,373)" id="shape72"><path stroke="#236ea1" fill="none" d="M0,0L0,28.5L71,28.5L71,40.1"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M71,44.5L74,39.3C73.1,39.9,72.1,40.1,71,40.1C69.9,40.1,68.9,39.9,68,39.3L71,44.5"/></g><g transform="translate(599.5,268.23)" id="shape73"><path stroke="#236ea1" fill="none" d="M0,0L0,133.3L-93,133.3L-93,144.9"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-93,149.3L-90,144.1C-90.9,144.6,-91.9,144.9,-93,144.9C-94.1,144.9,-95.1,144.6,-96,144.1L-93,149.3"/></g><g transform="translate(755,236)" id="shape74"><path stroke="#236ea1" fill="none" d="M0,0L18,0L18,177.1"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M18,181.5L21,176.3C20.1,176.9,19.1,177.1,18,177.1C16.9,177.1,15.9,176.9,15,176.3L18,181.5"/></g><g transform="translate(677.25,268.23)" id="shape75"><path stroke="#236ea1" fill="none" d="M0,0L0,226.3L-46.2,226.3L-46.2,253.9"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-46.2,258.3L-43.2,253.1C-44.1,253.6,-45.1,253.9,-46.2,253.9C-47.3,253.9,-48.4,253.6,-49.2,253.1L-46.2,258.3"/></g><g transform="translate(506.5,482)" id="shape76"><path stroke="#236ea1" fill="none" d="M0,0L0,28.5L54.8,28.5L54.8,40.1"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M54.8,44.5L57.8,39.3C56.9,39.9,55.9,40.1,54.8,40.1C53.7,40.1,52.6,39.9,51.8,39.3L54.8,44.5"/></g><g transform="translate(773,482)" id="shape77"><path stroke="#236ea1" fill="none" d="M0,0L0,61L-67.8,61"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M-72.2,61L-67,64C-67.6,63.2,-67.8,62.1,-67.8,61C-67.8,59.9,-67.6,58.9,-67,58L-72.2,61"/></g><g transform="translate(222,340.77)" id="shape78"><path stroke="#236ea1" fill="none" d="M0,0L-32,0L-32,218.8L195.4,218.8"/><path stroke="#236ea1" stroke-linecap="round" fill="#236ea1" stroke-width="1" d="M199.8,218.8L194.6,215.8C195.1,216.6,195.4,217.7,195.4,218.8C195.4,219.9,195.1,220.9,194.6,221.8L199.8,218.8"/></g></svg></div>
        <div id="copyright">Powered by <a href="https://www.edrawsoft.com/" target="_blank" title="edrawsoft">Edraw Max</a></div>
      </div>
      <div id="navBar">
        <div id="nav-thumbs">
          <div class="nav-thumb">
            <div>
              <span class="number">
                <span class="pagenum">1</span>
              </span>
              <a href="#page1">
                <img src=""/>
              </a>
            </div>
            <p>parent</p>
          </div>
          <div class="nav-thumb">
            <div>
              <span class="number">
                <span class="pagenum">2</span>
              </span>
              <a href="#page2">
                <img src=""/>
              </a>
            </div>
            <p>gateway-handler</p>
          </div>
          <div class="nav-thumb">
            <div>
              <span class="number">
                <span class="pagenum">3</span>
              </span>
              <a href="#page3">
                <img src=""/>
              </a>
            </div>
            <p>producer</p>
          </div>
          <div class="nav-thumb">
            <div>
              <span class="number">
                <span class="pagenum">4</span>
              </span>
              <a href="#page4">
                <img src=""/>
              </a>
            </div>
            <p>mgt</p>
          </div>
          <div class="nav-thumb">
            <div>
              <span class="number">
                <span class="pagenum">5</span>
              </span>
              <a href="#page5">
                <img src=""/>
              </a>
            </div>
            <p>dubbo-app-handler</p>
          </div>
        </div>
      </div>
    </div>
    <script>
        const svgs=document.getElementById("svg-container").children;
        const UA=window.navigator.userAgent;
        const ua=(UA.indexOf('rv:11')+UA.indexOf('Firefox'))>=0;
        const svgcount=document.getElementById('svg-container').childElementCount;
        var styleArr=[];
        var heightArr=[];
        var navBar=document.getElementById('navBar');
        var conInfo=document.getElementById('content-info');
        for(var i=0;i<svgcount;i++){
            styleArr[i] = {width:svgs[i].getAttribute('width'),height:svgs[i].getAttribute('height')}
        }
        window.onresize=function () {
            renavstyle();
            resvgstyle();
        };
        window.onscroll=renavstyle;
        window.onload=function () {
            renavstyle();
            var sideWidth=navBar.offsetWidth;
            document.getElementById('content-info').style.marginRight=sideWidth+'px';
            document.getElementById('main-content').style.marginRight=sideWidth+'px';
            resvgstyle();
            doscroll();
        };
        function recontainstyle() {
            var topHeight=conInfo.clientHeight;
            var svgHeight=0;
            for(var i=0;i<svgcount;i++){
                heightArr[i]=svgs[i].getBoundingClientRect().height+10;
                svgHeight+=svgs[i].clientHeight ||svgs[i].getBoundingClientRect().height;
            }
            var fullHeight=svgHeight+Number(topHeight);
            if(fullHeight<window.innerHeight){
            document.getElementById('copyright').style.position='absolute';
            document.getElementById('copyright').style.transform ='translateX(-50%)';
            document.getElementById('main-content').style.position='absolute';
            document.getElementById('main-content').style.top=topHeight+'px';
        }else{
            document.getElementById('copyright').style.position='';
            document.getElementById('copyright').style.transform ='';
            document.getElementById('main-content').style.position='';
        }
        }
        function resvgstyle() {
            var sideWidth=navBar.offsetWidth+20;
            for(var i=0;i<svgcount;i++){
                var oriWidth = styleArr[i].width;
                var oriHeight = styleArr[i].height;
                var percent = oriHeight / oriWidth;
                var innerWidth=document.body.offsetWidth-sideWidth;
                if (innerWidth <= oriWidth) {
                    svgs[i].removeAttribute('width');
                    svgs[i].removeAttribute('height');
                    if (ua) {
                        svgs[i].setAttribute('height',innerWidth*percent);
                    }
                }else {
                    svgs[i].setAttribute('width', oriWidth);
                    svgs[i].setAttribute('height', oriHeight);
                }
            }
            recontainstyle();
        }
        function renavstyle() {
            var topHeight=conInfo.clientHeight;
            var scrollTop=document.body.scrollTop||document.documentElement.scrollTop;
            if(scrollTop>topHeight){
                document.getElementById('navBar').style.top=0+'px';
            }else{
                document.getElementById('navBar').style.top=topHeight-scrollTop+'px';
            }
            doscroll();
        }
        function doscroll() {
            var topHeight=conInfo.clientHeight;
            var scrollTop=document.body.scrollTop||document.documentElement.scrollTop;
            for(var i=0;i<svgcount;i++){
                var sum=0;
                for(var j=0;j<=i;j++){
                    sum+=heightArr[j];
                }
                if(scrollTop+window.innerHeight/2-topHeight-sum<0){
                    var sub=Number(i)+1;
                    if(document.querySelector('#nav-thumbs .selected')){
                        document.querySelector('#nav-thumbs .selected').classList.remove('selected');
                    }
                    document.querySelector('.nav-thumb:nth-of-type('+sub+')').classList.add('selected');
                    break;
                }
            }
        }
        var navs=document.querySelectorAll('.nav-thumb');
        for(i=0;i<navs.length;i++){
            navs[i].children[0].onclick=function () {
                document.querySelector('#nav-thumbs .selected').classList.remove('selected');
                this.parentNode.classList.add('selected');
            }
        }
</script>
  </body>
</html>
